#include "Comm.hpp"
#include <sys/mman.h>
#include <sys/stat.h>        /* For mode constants */
#include <fcntl.h>           /* For O_* constants */
#include <stdio.h>

InitFifo init;

int main()
{
    int shmfd= shm_open(SHM_PATH, O_RDWR| O_CREAT, 0664);
    if (shmfd == -1) {
        perror("shm_open failed");
        return 1;
    }
    
    ftruncate(shmfd, SHM_SIZE);
    char* p= (char*)mmap(nullptr, SHM_SIZE, PROT_READ| PROT_WRITE, MAP_SHARED, shmfd, 0);
     printf("%p\n",p);
    int rfd= open("fifo", O_RDONLY);//阻塞直到客户端去打开命名管道写端
    while(1)
    {
        int tmp;
        int n= read(rfd, &tmp, 4);//利用命名管道实现共享内存的同步

        if(n>0)
        {
            printf("客户端说：%s\n",p);
        }
        else if(n== 0)
        {
            printf("客户端将命名管道写端关闭了，那也就说明不再往共享内存中写数据了,我也关闭命名管道读端，并释放共享内存\n");
            break;
        }
        else
        {

        }
    }

    close(rfd);//命名管道的路径结构由全局变量的析构函数负责

    munmap(p, SHM_SIZE);
    shm_unlink(SHM_PATH);
    close(shmfd);
    
    return 0;
}